#!/usr/bin/python
# -*- coding: utf-8 -*-

從 core 導入 *
從 lunar 導入 *

定義 取得對沖(地支):
    """
    正對著本支的地支
    十二地支組成六沖
    
    zwds: 又稱 "沖宮" 及 "對宮"
    """
    返回 地支表[(地支表.索引(地支)+6)%12]

定義 取得三合(地支):
    """
    
    zwds 又稱 "三方"
    """
    返回 [地支表[(地支表.索引(地支)+i)%12] 取 i 自 (4,8)]

定義 取得六合(地支):
    """
    與星曜間於不同宮位的強弱程度 (廟陷) 有關
    """
    六合 = {子:丑, 寅:亥, 卯:戌,
           辰:酉, 巳:申, 午:未,
           未:午, 申:巳, 酉:辰,
           戌:卯, 亥:寅, 丑:子,
        }
    返回 六合[地支]


# 古時月份從3月開始
寅宮地支表 = 地支表[2:]+地支表[:2]

# zwds
# 五行局數 河圖+洛書
# http://hk.myblog.yahoo.com/lawrencioy/article?mid=363
# http://hk.myblog.yahoo.com/lawrencioy/article?mid=368
火.局數 = 6
土.局數 = 5
金.局數 = 4 
木.局數 = 3
水.局數 = 2


類別 星曜(物件):
    """
    紫微星曜
    """
    定義 __初始化__(我, 名稱, 描述, 類型, 時辰="", 級數=""):
        我.名稱 = 名稱
        我.描述 = 描述
        我.正曜 = 假
        我.化曜 = 假
        #輔佐吉
        我.輔曜 = 假
        我.佐曜 = 假
        我.空劫 = 假
        我.空曜 = 假
        我.刑曜 = 假
        我.忌曜 = 假
        我.煞曜 = 假
        我.桃花 = 假
        我.文曜 = 假
        我.科名 = 假
        我.雜曜 = 假

        如果 "正" 在 類型:
            我.正曜 = 真
        如果 "化" 在 類型:
            我.化曜 = 真
        如果 "輔" 在 類型:
            我.輔曜 = 真
        如果 "佐" 在 類型:
            我.佐曜 = 真
        如果 "劫" 在 類型:
            我.空劫 = 真
        如果 "空" 在 類型:
            我.空曜 = 真
        如果 "刑" 在 類型:
            我.刑曜 = 真
        如果 "忌" 在 類型:
            我.忌曜 = 真
        如果 "煞" 在 類型:
            我.煞曜 = 真
        如果 "桃" 在 類型:
            我.桃花 = 真
        如果 "文" 在 類型:
            我.文曜 = 真
        如果 "科" 在 類型:
            我.科名 = 真
        如果 "雜" 在 類型:
            我.雜曜 = 真
        我.時辰 = 時辰
        我.級數 = 級數

    定義 __字串__(我):
        返回 我.名稱

# 114 星
#紫微
紫微 = 星曜("紫微", "", ["正"], "八字", "甲")
天機 = 星曜("天機", "", ["正"], "八字", "甲")
太陽 = 星曜("太陽", "", ["正"], "八字", "甲")
武曲 = 星曜("武曲", "", ["正"], "八字", "甲")
天同 = 星曜("天同", "", ["正"], "八字", "甲")
廉貞 = 星曜("廉貞", "", ["正"], "八字", "甲")

# 天府
天府 = 星曜("天府", "", ["正"], "八字", "甲")
太陰 = 星曜("太陰", "", ["正"], "八字", "甲")
貪狼 = 星曜("貪狼", "", ["正"], "八字", "甲")
巨門 = 星曜("巨門", "", ["正"], "八字", "甲")
天相 = 星曜("天相", "", ["正"], "八字", "甲")
天梁 = 星曜("天梁", "", ["正"], "八字", "甲")
七殺 = 星曜("七殺", "", ["正"], "八字", "甲")
破軍 = 星曜("破軍", "", ["正"], "八字", "甲")

# 年干系星
天魁 = 星曜("天魁", "", ["輔"], "年干", "甲")
天鉞 = 星曜("天鉞", "", ["輔"], "年干", "甲")
祿存 = 星曜("祿存", "", ["佐"], "年干", "甲")
擎羊 = 星曜("擎羊", "", ["煞", "刑"], "年干", "甲")
陀羅 = 星曜("陀羅", "", ["煞", "忌"], "年干", "甲")
天官 = 星曜("天官", "", ["科"], "年干", "乙")
天廚 = 星曜("天廚", "", ["科"], "年干", "")
天福 = 星曜("天福", "", ["科"], "年干", "乙")
化祿 = 星曜("化祿", "", ["化"], "年干", "甲")
化權 = 星曜("化權", "", ["化"], "年干", "甲")
化科 = 星曜("化科", "", ["化", "文", "科"], "年干", "甲")
化忌 = 星曜("化忌", "", ["化", "忌"], "年干", "甲")
截空 = 星曜("截空", "", ["空"], "年干", "丙")
截路 = 截空
旬空 = 星曜("旬空", "", ["空"], "年干", "丙")
空亡 = 旬空
# 博士、力士、青龍、小耗、將軍、奏書、飛廉、喜神、病符、大耗、伏兵、官府。長生
沐浴 = 星曜("沐浴", "", ["桃"], "年干", "丙")
# 冠帶、臨官、帝旺、衰、病、死、墓、絕、胎、養。

# 年支系星
紅鸞 = 星曜("紅鸞", "", ["桃"], "年干", "乙")
天喜 = 星曜("天喜", "", ["桃"], "年干", "乙")
龍池 = 星曜("龍池", "", ["文", "科"], "年干", "乙")
鳳閣 = 星曜("鳳閣", "", ["文", "科"], "年干", "乙")
#天德、解神、天哭、天虛、弧辰、寡宿
天馬 = 星曜("天馬", "", ["佐"], "年干", "甲")
天空 = 星曜("天空", "", ["空"], "年干", "乙")
# 蜚廉、破碎、年解
大耗 = 星曜("大耗", "", ["桃"], "年干", "丙")
#月德
天才 = 星曜("天才", "", ["文", "科"], "年干", "乙")
#天壽
火星 = 星曜("火星", "", ["煞"], "年干", "甲")
鈴星 = 星曜("鈴星", "", ["煞"], "年干", "甲")
# 將星、攀鞍、歲驛、息神、華蓋、劫煞、災煞、天煞、指背
咸池 = 星曜("咸池", "", ["桃"], "年干", "乙")
#月煞、亡神。
# 太歲、晦氣、喪門、貫索、官符、小耗、歲破、龍德、白虎、天德、吊客、病符。

# 月系星
左輔 = 星曜("左輔", "", ["輔"], "月", "甲")
右弼 = 星曜("右弼", "", ["輔"], "月", "甲")
天刑 = 星曜("天刑", "", ["刑"], "月", "乙")
# 解神、天巫、天月
天姚 = 星曜("天姚", "", ["桃"], "月", "乙")
#陰煞。

# 日系星
三台 = 星曜("三台", "", ["科"], "日", "乙")
八座 = 星曜("八座", "", ["科"], "日", "乙")
恩光 = 星曜("恩光", "", ["科"], "日", "乙")
天貴 = 星曜("天貴", "", ["科"], "日", "乙")

# 時系星
文昌 = 星曜("文昌", "", ["佐", "文", "科"], "時", "甲")
文曲 = 星曜("文曲", "", ["佐", "文", "科"], "時", "甲")
地空 = 星曜("地空", "", ["劫", "空"], "時", "甲")
地劫 = 星曜("地劫", "", ["劫", "空"], "時", "甲")
台輔 = 星曜("台輔", "", ["科"], "時", "乙")
封誥 = 星曜("封誥", "", ["科"], "時", "乙")




類別 宮垣(物件):
    """
    人事12宮垣
    http://hk.myblog.yahoo.com/lawrencioy/article?mid=118
    http://hk.myblog.yahoo.com/lawrencioy/article?mid=124

                  命身 
             兄弟      父母
        夫妻                福德        家庭人倫
    子女 ----------------------- 田宅 --------------
        財帛                事業        環境際遇
             疾厄      交友
                  遷移
    
    數往者順，知來者逆
    """
    定義 __初始化__(我, 名稱, 描述):
        我.名稱 = 名稱
        我.描述 = 描述
        我.天干 = 空 #寅宮天干
        我.地支 = 空 #寅宮地支
        我.正曜 = [] #甲級星
        我.輔曜 = [] #乙級星
        我.雜曜 = []

    定義 __字串__(我):
        返回 我.名稱

    # 宮位方法
    定義 同宮(我):
        pass

    同度 = 同宮

# 本宮: 可用地支代表, 亦可用人事十二宮稱之
命宮 = 宮垣('命宮', '主個人先後天性格，人格特質，一生命運趨勢。個人先天個性與人格特質')
命身 = 命宮
兄弟 = 宮垣('兄弟', '兄弟姊妹人數及關係；亦主與平輩間的關係。對兄弟或親友的態度')
夫妻 = 宮垣('夫妻', '感情路上坦蕩，夫妻關係，婚姻狀況，配偶性格樣貌。對感情的處理態度及婚姻的相處模式')
道情 = 夫妻 #佛道
子女 = 宮垣('子女', '子女性格、多寡；引申表示與晚輩的關係。個人對子女的管教態度及期望')
弟子 = 子女 #佛道
財帛 = 宮垣('財帛', '財政狀況，進財性質及方法，能否持盈。個人的理財模式')
疾厄 = 宮垣('疾厄', '易患何種疾病，宿疾有無，災厄意外的可能。個人對健康狀況的態度及處理模式')
遷移 = 宮垣('遷移', '社交能力，人際關係；移居、經營狀況、旅行遭遇等。亦能反映命運的趨勢。對外的人際關係，及發展的情況')
交友 = 宮垣('交友', '與雇員或下屬的關係，並反映人際關係總體情況。個人與友人、部屬、同僚間的相處態度')
奴僕 = 交友
事業 = 宮垣('事業', '主事業運勢。個人事業的發展模式及態度')
官祿 = 事業
師號 = 事業 #佛道
田宅 = 宮垣('田宅', '產業運勢，會否繼承，繼承後可有破敗，會否置業；何時遷居，及風水影響程度等。個人對理財的態度，與財帛宮互補')
福德 = 宮垣('福德', '思想活動與精神享受。個人思想及心態、慾望的強弱')
父母 = 宮垣('父母', '父母夭壽，與其緣份；上司關係，官吏機構關係。個人對父母或親長的態度及期望')
相貌 = 父母

# 順行
十二宮表 = [命宮, 父母, 福德, 田宅, 事業, 交友, 遷移, 疾厄, 財帛, 子女, 夫妻, 兄弟]

# 對宮: 與本宮構成對沖關係的宮垣
命宮.對宮 = 遷移 # 取得對沖(命宮.地支)
父母.對宮 = 財帛
福德.對宮 = 疾厄
田宅.對宮 = 子女
事業.對宮 = 夫妻
交友.對宮 = 兄弟
遷移.對宮 = 命宮
疾厄.對宮 = 福德
財帛.對宮 = 父母
子女.對宮 = 田宅
夫妻.對宮 = 事業
兄弟.對宮 = 交友

# 宮位關係
# 合宮: 與本宮構成三合關係的宮垣 取得對沖(地支)+取得三合(地支)
# 鄰宮: 本宮的左右兩宮
# 三方: 即三合宮位
# 四正: 三合宮加上對宮 [本宮]+取得對沖(地支)+取得三合(地支)
# 坐守: 星曜躔度本宮為之坐守
# 同度，同宮: 除已有星曜外，還有其他星曜坐守
# 對拱、拱照、朝拱: 星曜於對宮坐守
# 會照: 星曜於三合宮坐守
# 相夾: 星曜分別於鄰宮坐守
# 見: 星曜於三方四正宮位統稱為見
# 沖: 煞忌刑曜於三方四正宮位統稱為沖
# 由於安星規律的規範，斗數中某些星曜必然會於對宮及三合宮會照


"""
排盤

1. 找出命、身宮，
2. 再求五行局，
3. 找出紫微星與天府星

一出生即為一歲,
過一立春算加一歲

由命宮始, 陽男陰女大限順行
"""
        
類別 生辰八字(物件):
    """
    時間基礎
    """
    定義 __初始化__(我, 姓名, 性別, 干支, 生月, 生日, 生時, 閏月=0):
        我.姓名 = 姓名
        我.性別 = 性別
        我.干支 = 干支 #生年
        我.生年 = 干支
        我.生月 = 生月
        我.閏月 = 閏月
        我.生日 = 生日
        我.生時 = 生時
        我.時辰 = 生時


類別 紫微斗數(生辰八字):
    """
    出生時辰 < 命宮位置 < 命宮天干 < 五行局 < 紫微星 > 十四主星
    http://hk.myblog.yahoo.com/lawrencioy/article?mid=257
    
    人能知足，不怨天地，順天理立善造命運。
    認命、知命、然後聽天可也。
    -- 破窯賦
    """
    定義 __初始化__(我, 姓名, 性別, 生年, 生月, 生日, 生時, 閏月 = 0):

        super(紫微斗數, self).__初始化__(姓名, 性別, 生年, 生月, 生日, 生時, 閏月)

        # 1. 安命身宮
        我.命宮 = 我._取命宮() #命宮地支
        我.身宮 = 我._取身宮()
        我.命主 = 我._取命主()
        我.身主 = 我._取身主()

        # 2. 安十二宮
        我.安十二宮()

        # 3. 定宮位天干
        我.寅宮天干表 = 天干表[天干表.索引(我.五虎遁(我.生年.天干)):] + \
                    天干表[:(天干表.索引(我.五虎遁(我.生年.天干))+2)]
        # 將寅宮干支填入十二宮位
        取 順序, 宮位 自 列舉(我.十二宮位):
            宮位.天干 = 我.寅宮天干表[順序]
            宮位.地支 = 寅宮地支表[順序]

        # 4. 安五行局
        我.五行局 = 我._定五行局()

        # 5. 安十四主星的宮位
        我._安十四主星()

        # 6. 安輔、佐、煞、化、雜曜
        # 安四化
        我._安四化星()
        # 安輔佐諸曜
        我._安七吉六煞星()
        # 
        我._安年系星()
        我._安月系星()
        我._安日系星()
        # 判斷亮度

    定義 _取命宮(我):
        """
        出生月份宮度起子時, 逆時針數到出生時辰
        
        月數減時辰數再加一
        
        寅正順數月逢,
        生月起子兩頭通,
        順至生時身所在,
        逆到生時命之宮.
        """
        返回 寅宮地支表[(寅宮地支表.索引(寅宮地支表[我.生月-1]) - 地支表.索引(我.生時))%12]
    
    定義 _取身宮(我):
        """
        出生月份宮度起子時, 順時針數到出生時辰
        
        月數加時辰數再減一
        """
        返回 寅宮地支表[(寅宮地支表.索引(寅宮地支表[我.生月-1]) + 地支表.索引(我.生時))%12]

    定義 _取命主(我, 類型 = 2):
        """
        承自 果老星宗 命術
        唯當命宮無主星，或命主星處於命宮三方四正方位時，星性會影響命主的個性。

        子屬貪狼丑亥門
        寅戌生人屬祿存
        卯酉屬文巳未武
        辰申廉宿午破軍
        
        類型1: 據出生年的地支而定
        類型2: 以命宮所在宮位的地支而定, 同 果老星宗
        """
        如果 類型 == 1:
            支 = 我.生年.地支
        如果 類型 == 2:
            支 = 我.命宮

        如果 支 == 子:
            返回 貪狼
        假使 支 在 (丑, 亥):
            返回 巨門
        假使 支 在 (寅, 戌):
            返回 祿存
        假使 支 在 (卯, 酉):
            返回 文曲
        假使 支 在 (巳, 未):
            返回 武曲
        假使 支 在 (辰, 申):
            返回 廉貞
        假使 支 == 午:
            返回 破軍

    定義 _取身主(我):
        """
        看形性面貌的輔助
        當身主星處於命宮三方四正方位，同樣使身主所主的形性面貌更為明顯

        天機南斗第一星屬木
        天相南斗第二星屬水
        天梁南斗第三星屬土
        天同南斗第四星屬水
        文昌南斗第六星屬金
        火星屬火
        
        用生年地支為依據
        子支及午支對應的星曜有不同看法
        """
        支 = 我.生年.地支

        如果 支 在 (子, 午):
            返回 火星
        假使 支 在 (丑, 未):
            返回 天相
        假使 支 在 (寅, 申):
            返回 天梁
        假使 支 在 (卯, 酉):
            返回 天同
        假使 支 在 (辰, 戌):
            返回 文昌
        假使 支 在 (巳, 亥):
            返回 天機

    定義 安十二宮(我):
        """
        命前為父母, 命後乃兄弟,
        逆次而行之, 造端在夫妻,
        子女兼財帛, 疾厄有遷移,
        交友隨官祿, 田宅福德基.
        """
        從 copy 導入 deepcopy
        我.__命宮地支 = 寅宮地支表.索引(我.命宮)
        # 讓各個紫微斗數物件擁有獨立的宮垣物件
        我.十二宮位 = deepcopy(十二宮表[-我.__命宮地支:]) + \
                    deepcopy(十二宮表[:-我.__命宮地支])
        

    定義 五虎遁(我, 生年天干):
        """
        定寅宮天干
        
        就命主出生的年干，按表尋得所化之五行
        找出該五行所洩的五行
        對應所洩五行的天干便是「寅」宮的天干
        """
        如果 生年天干 在 (甲, 己): # 土
            返回 土.相洩.天干[0] #丙
        假使 生年天干 在 (乙, 庚): # 金
            返回 金.相洩.天干[0] #戊
        假使 生年天干 在 (丙, 辛): # 水
            返回 水.相洩.天干[0] #庚
        假使 生年天干 在 (丁, 壬): # 木
            返回 木.相洩.天干[0] #壬
        假使 生年天干 在 (戊, 癸): # 火
            返回 火.相洩.天干[0] #甲

    定義 _定五行局(我):
        """
        取得五行局數
        
        參考: 納音訣
        """
        干支 = 字串(我.寅宮天干表[我.__命宮地支]) + 字串(我.命宮)
        取 花甲 自 花甲表:
            如果 干支 == 花甲.名稱:
                返回 花甲.五行局

    定義 _起紫微(我):
        """
        公式:
        出生日數+X%五行局數 = 0
        出生日數+X/五行局數 = Y
        
        """
        取 y 自 範圍(1, 20):
            #如果 五行局數 * y >= 出生日數:
            #    x = 五行局數 * y - 出生日數
            如果 我.五行局.局數 * y >= 我.生日:
                x = 我.五行局.局數 * y - 我.生日
                break
        如果 x % 2 == 0:
            返回 寅宮地支表[y + x -1]
        否則:
            返回 寅宮地支表[y - x -1]
    
    定義 _安紫微諸辰(我, 宮位):
        """紫機一日, 武同二廉, 逆行"""
        #找宮位
        宮位索引 = 我.十二宮位.索引(宮位)
        宮位.正曜.加入(紫微)
        我.十二宮位[宮位索引-1].正曜.加入(天機)
        我.十二宮位[宮位索引-3].正曜.加入(太陽)
        我.十二宮位[宮位索引-4].正曜.加入(武曲)
        我.十二宮位[宮位索引-5].正曜.加入(天同)
        我.十二宮位[宮位索引-8].正曜.加入(廉貞)

    定義 _起天府(我, 紫微宮位):
        同度 = {寅:寅, 申:申, 丑:卯, 卯:丑,
        	   子:辰, 辰:子, 巳:亥, 亥:巳,
        	   午:戌, 戌:午, 未:酉, 酉:未,
        }
        返回 同度[紫微宮位]

    定義 _安天府諸辰(我, 宮位):
        """府陰貪巨, 相梁殺三破 順行"""
        宮位索引 = 我.十二宮位.索引(宮位)
        宮位.正曜.加入(天府)
        我.十二宮位[宮位索引-2].正曜.加入(破軍)
        我.十二宮位[宮位索引-6].正曜.加入(七殺)
        我.十二宮位[宮位索引-7].正曜.加入(天梁)
        我.十二宮位[宮位索引-8].正曜.加入(天相)
        我.十二宮位[宮位索引-9].正曜.加入(巨門)
        我.十二宮位[宮位索引-10].正曜.加入(貪狼)
        我.十二宮位[宮位索引-11].正曜.加入(太陰)       

    定義 _安十四主星(我):
        """
        地支 -> 宮位 -> 正曜.更新(紫微)
        """
        我.__紫微地支 = 我._起紫微()
        我.__天府地支 = 我._起天府(我.__紫微地支)
        取 宮位 自 我.十二宮位:
           如果 宮位.地支 == 我.__紫微地支:
               我._安紫微諸辰(宮位)
           如果 宮位.地支 == 我.__天府地支:
               我._安天府諸辰(宮位)
    定義 _安四化星(我):
        """
        祿權科忌
        
        甲廉破武陽, 乙機梁紫陰, 丙同機昌廉,
        丁陰同機巨, 戊貪陰陽機, 己武貪梁曲,
        庚陽武府同, 辛巨陽曲昌, 壬梁紫府武,
        癸破巨陰貪
        """
        #TODO: not finish yet
        pass

    定義 _安七吉六煞星(我):
        """
        左右、昌曲、魁鉞、祿馬
        羊陀、火鈴、空劫、天刑
        文曲星是由辰宮開始，順數到生時
        文昌星是由戌宮開始，逆數到生時
        左輔星是由辰宮開始，順數到生月
        右弼星是由戌宮開始，逆數到生月
        """
        #祿存, 羊陀
        祿 = {甲:寅, 乙:卯, 丙:巳, 丁:午, 戊:巳, 己:午, 庚:申, 辛:酉, 壬:亥, 癸:子}
        __祿存地支 = 祿[我.生年.天干]
        #火鈴
        #http://mm.httpcn.com/Html/News/2006-10-15/ILILPWCQ.shtml
        火 = {子:寅, 丑:卯, 寅:丑, 卯:酉, 辰:寅, 巳:卯, 午:丑, 未:酉, 申:寅, 酉:卯, 戌:丑, 亥:酉}
        鈴 = {子:戌, 丑:戌, 寅:卯, 卯:戌, 辰:戌, 巳:戌, 午:卯, 未:戌, 申:戌, 酉:戌, 戌:卯, 亥:戌}
        我.__火星地支 = 火[我.生年.地支]
        我.__鈴星地支 = 鈴[我.生年.地支]

        取 宮位 自 我.十二宮位:
           如果 宮位.地支 == 子: #火鈴
               我.__子宮宮位 = 宮位
           如果 宮位.地支 == 辰:
               我.__辰宮宮位 = 宮位
           如果 宮位.地支 == 戌:
               我.__戌宮宮位 = 宮位
           如果 宮位.地支 == 亥:
               我.__亥宮宮位 = 宮位 
           如果 宮位.地支 == __祿存地支:
               我.__祿存宮位 = 宮位

        # 索引從 0 開始 (已先減1)
        辰宮索引 = 我.十二宮位.索引(我.__辰宮宮位)
        戌宮索引 = 我.十二宮位.索引(我.__戌宮宮位)
        亥宮索引 = 我.十二宮位.索引(我.__亥宮宮位)
        
        我.十二宮位[辰宮索引-12+地支表.索引(我.生時)].輔曜.加入(文曲)
        我.十二宮位[戌宮索引-地支表.索引(我.生時)].輔曜.加入(文昌)
        我.十二宮位[辰宮索引-12+我.生月-1].輔曜.加入(左輔)
        我.十二宮位[戌宮索引-我.生月+1].輔曜.加入(右弼)
        我.十二宮位[亥宮索引-12+地支表.索引(我.生時)].輔曜.加入(地劫)
        我.十二宮位[亥宮索引-地支表.索引(我.生時)].輔曜.加入(地空)

        #魁鉞
        魁 = {甲:丑, 乙:子, 丙:亥, 丁:亥, 戊:丑, 己:子, 庚:午, 辛:午, 壬:卯, 癸:卯}
        鉞 = {甲:未, 乙:申, 丙:酉, 丁:酉, 戊:未, 己:申, 庚:寅, 辛:寅, 壬:巳, 癸:巳}
        取 宮位 自 我.十二宮位:
            如果 宮位.地支 == 魁[我.生年.天干]:
                宮位.輔曜.加入(天魁)
            如果 宮位.地支 == 鉞[我.生年.天干]:
                宮位.輔曜.加入(天鉞)
        
        #羊陀
        我.__祿存宮位.輔曜.加入(祿存)
        祿存索引 = 我.十二宮位.索引(我.__祿存宮位)
        我.十二宮位[祿存索引 -11].輔曜.加入(擎羊)
        我.十二宮位[祿存索引 -1].輔曜.加入(陀羅)

        #火鈴
        子宮索引 = 我.十二宮位.索引(我.__子宮宮位) #火鈴
        # 陽年火順鈴逆
        火星跨距 = 絕對值(地支表.索引(我.__火星地支) - 地支表.索引(我.生時))
        鈴星跨距 = 絕對值(地支表.索引(我.__鈴星地支) - 地支表.索引(我.生時))
        如果 我.生年.陰陽 == 陽:
            我.十二宮位[子宮索引 - 12 + 火星跨距 + 2].輔曜.加入(火星)
            我.十二宮位[子宮索引 - 鈴星跨距].輔曜.加入(鈴星)
            #印出 子宮索引, 地支表.索引(我.__火星地支), 地支表.索引(我.生時), 我.十二宮位[子宮索引 - 火星跨距 - 1]
        否則:
            我.十二宮位[子宮索引 - 火星跨距 + 2].輔曜.加入(火星)
            我.十二宮位[子宮索引 - 12 + 鈴星跨距 + 2].輔曜.加入(鈴星)
            #印出 子宮索引, 地支表.索引(我.__火星地支), 地支表.索引(我.生時), 我.十二宮位[子宮索引 - 火星跨距 - 1]

        #TODO: not finish yet

    定義 _安年系星(我):
        #TODO: not finish yet
        pass

    定義 _安月系星(我):
        #TODO: not finish yet
        pass

    定義 _安日系星(我):
        #TODO: not finish yet
        pass

    定義 廟旺利陷(我):
        """
        廟: 吉星逢之更吉, 兇星逢之不兇
        旺: 吉星逢之吉, 兇星逢之不兇
        得地(適度): 吉星逢之吉, 兇星逢之不兇
        利益(漸弱): 吉星逢之尚吉, 兇星逢之漸兇 
        平和(微):  吉星逢之力微, 兇星逢之加兇
        不得地(暗): 吉星逢之無力, 兇星逢之更兇  
        落陷(無光): 吉星逢之無用, 兇星逢之最兇 
        """
        #TODO: not finish yet
        pass

    定義 _取大限(我, 大限):
        """
        回傳大限範圍
        """
        返回 我.五行局.局數+10*(大限-1), 我.五行局.局數+10*大限

    定義 定盤(我):
        """紫微"""
        印出 我.姓名
        印出 字串(我.生年.陰陽)+字串(我.性別), \
        字串(我.五行局)+字串(我.五行局.局數)+"局", \
            "生肖", 字串(我.生年.地支.生肖)
    	印出 "定盤日期", 字串(我.生年)+"年 "+\
    	    字串(我.生月)+"月 "+字串(我.生日)+"日 "+字串(我.時辰)+"時"
    	import datetime
        # 年歲
        # if today.month <= 
        # if today.day <= 
        #print datetime.date.today().year - 1981 +1
    	# 現行大限  = _取大限(我.五行局.局數, )
    	印出 "命宮", 字串(我.命宮), "身宮", 字串(我.身宮)
    	印出 "命主", 字串(我.命主), "身主", 字串(我.身主), "\n"
    	
    	取 宮位 自 我.十二宮位:
    	    印出 宮位.天干, 宮位.地支, 宮位
    	    如果 宮位.正曜:
    	        取 正曜 自 宮位.正曜:
    	            印出 正曜
    	    如果 宮位.輔曜:
    	        取 輔曜 自 宮位.輔曜:
    	            印出 輔曜

        #取 i 自 範圍(12):
        #    資料 = 字串(我.寅宮天干表[i]) + 字串(寅宮地支表[i]) + ' ' + 字串(我.十二宮位[i])
        #    印出 資料

    定義 分析(我):
        pass
        # chunk 星, template 三方四正, 策略 局
        #外貌
        #性格
        #格局

    定義 定流年盤(我, 大限):
    	pass

    定義 __字串__(我):
        #取 i in 我.十二宮位:
        #    print i
        return ''


主程式:
    # 代號 = 紫微斗數(姓名, 性別, 生年, 生月, 生日, 生時)
    #s = 紫微斗數("陳大文", 男, 丙午, 5, 6, 酉)
    #s.定盤()
    q = 紫微斗數("如花", 女, 辛酉, 2, 24, 午)
    q.定盤()

#    取 地支 自 地支表:
#        印出 地支, 地支.陰陽
#        印出 "對宮為", 取得對沖(地支)
#        印出 "三方為", 取得三合(地支)[0], 取得三合(地支)[1]
